package org.wheel.plugins.toolkit.sql.render;

import org.wheel.plugins.toolkit.sql.enums.Dialect;
import org.wheel.plugins.toolkit.sql.segment.SegmentTree;

import java.util.Optional;

/**
 * 专为 DELETE 语句打造的轻量级渲染器。
 * 只拼出：
 *   DELETE FROM <table> [[AS] alias]
 *   [WHERE ...]
 * 其它段落（SELECT、GROUP、HAVING、ORDER、LIMIT）一律忽略。
 *
 * 方言扩展预留：
 *   未来支持 MySQL 的 DELETE ... ORDER BY ... LIMIT 时，
 *   在本类增加 dialect 判断并追加相应片段即可。
 */
public class DeleteSqlRenderer {

    private final Dialect dialect;

    public DeleteSqlRenderer(Dialect dialect) {
        this.dialect = dialect;
    }

    public String render(SegmentTree tree) {
        StringBuilder sql = new StringBuilder();
        /* 1. DELETE FROM */
        sql.append("DELETE FROM ").append(tree.getMainTable());
        /* 2. 别名 */
        if (tree.getMainAlias() != null) {
            // 达梦、金仓、Oracle 等可能要求 AS 关键字，这里统一不加，若需要再按 dialect 区分
            sql.append(" ").append(tree.getMainAlias());
        }
        /* 3. WHERE */
        Optional<String> whereOpt = tree.buildWhereSql();
        whereOpt.ifPresent(w -> sql.append(" WHERE ").append(w));
        /* 4. 未来扩展：ORDER BY / LIMIT / RETURNING 等，在此追加 */

        /* 5. MySQL 扩展 */
//        if (dialect == Dialect.MYSQL && tree.getOrderBySegment() != null) {
//            sql.append(" ORDER BY ").append(tree.getOrderBySegment().getSql());
//        }
//        if (dialect == Dialect.MYSQL && tree.getPageSegment() != null) {
//            sql.append(" LIMIT ").append(tree.getPageSegment().getLimit());
//        }
        return sql.toString();
    }
}